// 引入配置
import config from '@/config/config';

// 接口白名单（不校验401）
const whiteUrl = ['/chihiro/qxWxUserDeliveryAddress/getWxUserDefaultAddress'];

const requestInterceptors = (vm) => {
	/**
	 * 请求拦截
	 * @param {Object} http
	 */
	uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
			const lifeData = uni.getStorageSync('lifeData');
			config.data = config.data || {}
			config.header['X-Access-Token'] = lifeData.vuex_token ?? '';
			return config
		}, (config) => // 可使用async await 做异步操作
		Promise.reject(config))
}
const responseInterceptors = (vm) => {
	/**
	 * 响应拦截
	 * @param {Object} http 
	 */
	uni.$u.http.interceptors.response.use((response) => {
		/* 对响应成功做点什么 可使用async await 做异步操作*/
		const data = response.data
		// 自定义参数
		const {
			custom,
			url
		} = response.config;
		uni.hideLoading()
		if (data.code !== 200) { // 服务端返回的状态码不等于200，则reject()
			// 如果没有显式定义custom的toast参数为false的话，默认对报错进行toast弹出提示
			uni.$u.vuex('loading', false);
			if (data.code === 401) { //token失效跳转至登录界面
				uni.$u.route({
					url: 'pages/login/login'
				})
				return
			} else {
				if (custom.toast !== false) {
					uni.$u.toast(data.message)
				}
			}
			return Promise.reject(data)
			// 如果需要catch返回，则进行reject
			// if (custom?.catch) {
			// 	return Promise.reject(data)
			// } else {
			// 	// 否则返回一个pending中的promise
			// 	return data
			// }
		}
		return data.result || {}
	}, (response) => {
		uni.hideLoading()
		const {
			data,
			config
		} = response;
		if (whiteUrl?.indexOf(config?.url) === -1) {
			if (data.code === 401) { //token失效跳转至登录界面
				uni.$u.route({
					url: 'pages/login/login'
				})
			} else if (data.code === 500) {
				console.log(data, '500');
			}
		} else {
			return data.result;
		}
		/*  对响应错误做点什么 （statusCode !== 200）*/
		return Promise.reject(response)
	})
}

//  初始化请求配置
const initRequest = (vm) => {
	uni.$u.http.setConfig((defaultConfig) => {
		/* defaultConfig 为默认全局配置 */
		defaultConfig.baseURL = config.baseUrl /* 根域名 */
		return defaultConfig
	})
	requestInterceptors(vm)
	responseInterceptors(vm)
}
export {
	initRequest
}